package com.xjscrm.server.mapper;

import com.xjscrm.common.entity.WwTags;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 客户标签表(WwTags)表数据库访问层
 *
 * @author makejava
 * @since 2024-03-10 11:13:23
 */
@Repository
public interface WwTagsMapper {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    WwTags queryById(@Param("id") Long id);

    /**
     * 根据机器人查询个人标签
     * @param tagId 标签id
     * @param deviceUniqueId 机器人主键id
     * @para type 标签类型(企微标签-0，个人标签-1)
     * @return 实例对象
     */
    WwTags queryPrivateTagByTagIdAndDeviceUniqueId(@Param("deviceUniqueId") Long deviceUniqueId, @Param("tagId") String tagId);

    /**
     * 根据机器人查询个人标签
     * @param tagName 标签名称
     * @param deviceUniqueId 机器人主键id
     * @para type 标签类型(企微标签-0，个人标签-1)
     * @return 实例对象
     */
    WwTags queryPrivateTagByTagNameAndDeviceUniqueId(@Param("deviceUniqueId") Long deviceUniqueId, @Param("tagName") String tagName);


    /**
     * 查询个人标签的默认分组
     *
     * @param deviceUniqueId 标签id
     * @param deviceUniqueId 机器人主键id
     * @para type 标签类型(企微标签-0，个人标签-1)
     * @return 实例对象
     */
    WwTags queryDefaultByDevice(@Param("deviceUniqueId") Long deviceUniqueId);

    /**
     * 通过标签id字符串查询企业标签
     * @param tagId 标签id
     * @return 实例对象
     */
    WwTags queryEnterTagByTagIdStr(@Param("tagId") String tagId, @Param("merId") Long merId);

    /**
     * 通过标签id字符串查询企业标签
     * @param tagName 标签名称
     * @return 实例对象
     */
    List<WwTags> queryEnterTagByTagName(@Param("tagName") String tagName, @Param("pid") Long pid, @Param("merId") Long merId, @Param("corpId") String corpId);

    /**
     * 通过标签id字符串查询企业标签分组
     * @param tagGroupName 标签分组名称
     * @return 实例对象
     */
    List<WwTags> queryGroupEnterTagByTagName(@Param("tagGroupName") String tagGroupName, @Param("merId") Long merId, @Param("corpId") String corpId);

    /**
     * 通过标签id字符串查询单条数据
     * @param tagIdStr 标签id
     * @return 实例对象
     */
    WwTags queryByTagIdStr(@Param("merId") Long merId, @Param("tagIdStr") String tagIdStr);

    /**
     * 通过标签id字符串查询单条数据
     * @param externalId 标签id
     * @return 实例对象
     */
    WwTags queryByExternalId(@Param("merId") Long merId, @Param("corpId") String corpId, @Param("externalId") String externalId);

    /**
     * 通过企业标签组查询
     * @param groupName
     * @return 实例对象
     */
    WwTags queryByGroupName(@Param("merId") Long merId, @Param("corpId") String corpId, @Param("groupName") String groupName);

    /**
     * 查询该企微的所有企业标签列表
     *
     * @param corpId 企业id
     * @param merId 运营商id
     * @para type 标签类型(企微标签-0，个人标签-1)
     * @return 实例对象
     */
    List<WwTags> findEnterListByCorpId(@Param("corpId") String corpId, @Param("merId") Long merId);

    /**
     * 查询该机器人的所有个人标签
     *
     * @param deviceUniqueId 运营商id
     * @para type 标签类型(企微标签-0，个人标签-1)
     * @return 实例对象
     */
    List<WwTags> findPrivateListByDeviceUniqueId(@Param("corpId") String corpId, @Param("deviceUniqueId") Long deviceUniqueId);

    /**
     * 新增数据
     *
     * @param wwTags 实例对象
     * @return 影响行数
     */
    int insert(WwTags wwTags);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<WwTags> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<WwTags> entities);

    /**
     * 修改数据
     *
     * @param wwTags 实例对象
     * @return 影响行数
     */
    int update(WwTags wwTags);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Long id);

}

